home *** CD-ROM | disk | FTP | other *** search
Text File | 1996-09-17 | 10.5 KB | 351 lines | [TEXT/MPS ] |
- //========================================================================================
- //
- // File: FWSemCol.cpp
- // Release Version: $ ODF 2 $
- //
- // Copyright: (c) 1993 - 1996 by Apple Computer, Inc., all rights reserved.
- //
- //========================================================================================
-
- #ifndef FWSCPCOL_H
- #include "FWScpCol.h"
- #endif
-
- #ifndef FWAPLEVT_H
- #include "FWAplEvt.h"
- #endif
-
- #ifndef FWDSCOPR_H
- #include "FWDscOpr.h"
- #endif
-
- //========================================================================================
- // Runtime Information
- //========================================================================================
-
- #ifdef FW_BUILD_MAC
- #pragma segment fwsemevt
- #endif
-
- FW_DEFINE_AUTO(FW_CScriptableCollection)
-
- //========================================================================================
- // CLASS FW_CScriptableCollection
- //========================================================================================
-
- FW_DEFINE_CLASS_M1(FW_CScriptableCollection, FW_MScriptable)
-
- //---------------------------------------------------------------------------------------
- // FW_CScriptableCollection::FW_CScriptableCollection
- //---------------------------------------------------------------------------------------
-
- FW_CScriptableCollection::FW_CScriptableCollection() :
- fRefCount(1),
- fRep(FW_NEW(FW_TOrderedCollection<FW_MScriptable>, ()))
- {
- FW_END_CONSTRUCTOR
- }
-
- //---------------------------------------------------------------------------------------
- // FW_CScriptableCollection::~FW_CScriptableCollection
- //---------------------------------------------------------------------------------------
-
- FW_CScriptableCollection::~FW_CScriptableCollection()
- {
- FW_START_DESTRUCTOR
-
- FW_ASSERT(fRefCount == 0);
-
- FW_MScriptable* element = fRep->First();
-
- while (element)
- {
- Remove(element);
- element = fRep->First();
- }
- delete fRep;
- }
-
- //---------------------------------------------------------------------------------------
- // FW_CScriptableCollection::AcquireScriptable
- //---------------------------------------------------------------------------------------
-
- long FW_CScriptableCollection::AcquireScriptable()
- {
- return ++fRefCount;
- }
-
- //---------------------------------------------------------------------------------------
- // FW_CScriptableCollection::ReleaseScriptable
- //---------------------------------------------------------------------------------------
-
- long FW_CScriptableCollection::ReleaseScriptable()
- {
- FW_ASSERT(fRefCount > 0);
-
- long result = --fRefCount;
-
- if (result == 0)
- delete this;
-
- return result;
- }
-
- //---------------------------------------------------------------------------------------
- // FW_CScriptableCollection::Add
- //---------------------------------------------------------------------------------------
-
- void FW_CScriptableCollection::Add(FW_MScriptable* element)
- {
- fRep->AddLast(element);
- element->AcquireScriptable();
- element->AddDependent(this);
- }
-
- //---------------------------------------------------------------------------------------
- // FW_CScriptableCollection::Remove
- //---------------------------------------------------------------------------------------
-
- void FW_CScriptableCollection::Remove(FW_MScriptable* element)
- {
- fRep->Remove(element);
- element->RemoveDependent(this);
- element->ReleaseScriptable();
- }
-
- //---------------------------------------------------------------------------------------
- // FW_CScriptableCollection::AdjustMarks
- //---------------------------------------------------------------------------------------
-
- void FW_CScriptableCollection::AdjustMarks(Environment* ev,
- ODSLong newStart,
- ODSLong newStop)
- {
- FW_UNUSED(ev);
- long elementsToDelete = Count() - newStop;
- while (elementsToDelete > 0)
- {
- Remove(fRep->Last());
- --elementsToDelete;
- }
-
- elementsToDelete = newStart - 1;
- while (elementsToDelete > 0)
- {
- Remove(fRep->First());
- --elementsToDelete;
- }
- }
-
- //---------------------------------------------------------------------------------------
- // FW_CScriptableCollection::GetFrame
- //---------------------------------------------------------------------------------------
-
- FW_CFrame* FW_CScriptableCollection::GetFrame(Environment* ev,
- FW_CPart* part) const
- {
- FW_MScriptable* first = NULL;
-
- if (Count() > 0)
- first = fRep->First();
-
- return first ? first->GetFrame(ev, part) : FW_MScriptable::GetFrame(ev, part);
- }
-
- //---------------------------------------------------------------------------------------
- // FW_CScriptableCollection::DoAECountElements
- //---------------------------------------------------------------------------------------
-
- void FW_CScriptableCollection::DoAECountElements(Environment* ev,
- FW_CPart* part,
- const FW_CAppleEvent& event,
- FW_CAppleEvent& reply)
- {
- FW_UNUSED(ev);
- FW_UNUSED(part);
- FW_UNUSED(event);
- reply.PutLongInteger(Count(), keyAEResult);
- }
-
- //---------------------------------------------------------------------------------------
- // FW_CScriptableCollection::DoAEGetData
- //---------------------------------------------------------------------------------------
-
- void FW_CScriptableCollection::DoAEGetData(Environment* ev,
- FW_CPart* part,
- const FW_CAppleEvent& event,
- FW_CAppleEvent& reply)
- {
- FW_TRY
- {
- FW_TOrderedCollectionIterator<FW_MScriptable> iter(fRep);
-
- FW_CDesc localDesc;
- FW_CDesc replyList;
-
- for (FW_MScriptable* semObj = iter.First(); iter.IsNotComplete(); semObj = iter.Next())
- {
- semObj->DoAEGetData(ev, part, event, reply);
-
- localDesc.Clear();
- reply.GetDataByDesc(localDesc, keyAEResult);
-
- replyList.PutDataByDesc(localDesc);
-
- reply.DeleteItemByKey(keyAEResult);
- }
-
- reply.PutDataByDesc(replyList, keyAEResult);
- }
- FW_CATCH_BEGIN
- FW_CATCH_EVERYTHING()
- {
- if (reply.HasDataKey(keyAEResult))
- reply.DeleteItemByKey(keyAEResult);
-
- FW_THROW_SAME();
- }
- FW_CATCH_END
- }
-
- //---------------------------------------------------------------------------------------
- // FW_CScriptableCollection::DoAESetData
- //---------------------------------------------------------------------------------------
-
- void FW_CScriptableCollection::DoAESetData(Environment* ev,
- FW_CPart* part,
- const FW_CAppleEvent& event,
- FW_CAppleEvent& reply)
- {
- FW_TOrderedCollectionIterator<FW_MScriptable> iter(fRep);
-
- for (FW_MScriptable* semObj = iter.First(); iter.IsNotComplete(); semObj = iter.Next())
- {
- semObj->DoAESetData(ev, part, event, reply);
- }
- }
-
- //---------------------------------------------------------------------------------------
- // FW_CScriptableCollection::HasProperty
- //---------------------------------------------------------------------------------------
-
- FW_Boolean FW_CScriptableCollection::HasProperty(ODDescType whichProperty) const
- {
- FW_MScriptable* first = NULL;
-
- if (Count() > 0)
- first = fRep->First();
-
- return first ? first->HasProperty(whichProperty) : FW_MScriptable::HasProperty(whichProperty);
- }
-
- //---------------------------------------------------------------------------------------
- // FW_CScriptableCollection::GetPropertyInfo
- //---------------------------------------------------------------------------------------
-
- void FW_CScriptableCollection::GetPropertyInfo(Environment* ev,
- FW_CPart* part,
- FW_Boolean& canUndo,
- FW_Boolean& causesChange) const
- {
- FW_MScriptable::GetPropertyInfo(ev, part, canUndo, causesChange);
-
- if (Count() > 0)
- {
- FW_MScriptable* first = fRep->First();
- if (first)
- first->GetPropertyInfo(ev, part, canUndo, causesChange);
- }
- }
-
- //---------------------------------------------------------------------------------------
- // FW_CScriptableCollection::GetProperty
- //---------------------------------------------------------------------------------------
-
- FW_Boolean FW_CScriptableCollection::GetProperty(Environment* ev,
- FW_CPart* part,
- FW_CDesc& propertyValue,
- ODDescType whichProperty,
- ODDescType desiredType) const
- {
- FW_TOrderedCollectionIterator<FW_MScriptable> iter(fRep);
- FW_CDesc eachProperty;
-
- for (FW_MScriptable* semObj = iter.First(); iter.IsNotComplete(); semObj = iter.Next())
- {
- eachProperty.Clear();
- semObj->GetProperty(ev, part, eachProperty, whichProperty, desiredType);
-
- propertyValue << eachProperty;
- }
- return TRUE;
- }
-
- //---------------------------------------------------------------------------------------
- // FW_CScriptableCollection::SetProperty
- //---------------------------------------------------------------------------------------
-
- void FW_CScriptableCollection::SetProperty(Environment* ev,
- FW_CPart* part,
- FW_CDesc& propertyValue,
- ODDescType whichProperty)
- {
- FW_TOrderedCollectionIterator<FW_MScriptable> iter(fRep);
-
- for (FW_MScriptable* semObj = iter.First(); iter.IsNotComplete(); semObj = iter.Next())
- {
- semObj->SetProperty(ev, part, propertyValue, whichProperty);
- }
- }
-
- //---------------------------------------------------------------------------------------
- // FW_CScriptableCollection::RestoreProperty
- //---------------------------------------------------------------------------------------
-
- void FW_CScriptableCollection::RestoreProperty(Environment* ev,
- FW_CPart* part,
- FW_CDesc& propertyValue,
- ODDescType whichProperty)
- {
- FW_TOrderedCollectionIterator<FW_MScriptable> iter(fRep);
- FW_CDesc eachProperty;
- long index = 1;
-
- for (FW_MScriptable* semObj = iter.First(); iter.IsNotComplete(); semObj = iter.Next())
- {
- eachProperty.Clear();
- propertyValue.GetDescFromList(index++, eachProperty);
- semObj->SetProperty(ev, part, eachProperty, whichProperty);
- }
- }
-
- //---------------------------------------------------------------------------------------
- // FW_CScriptableCollection::GetUndoStrings
- //---------------------------------------------------------------------------------------
-
- void FW_CScriptableCollection::GetUndoStrings(Environment* ev,
- FW_CPart* part,
- ODDescType whichProperty,
- FW_CString& undoString,
- FW_CString& redoString) const
- {
- FW_MScriptable* first = NULL;
-
- if (Count() > 0)
- first = fRep->First();
-
- if (first)
- first->GetUndoStrings(ev, part, whichProperty, undoString, redoString);
- else
- FW_MScriptable::GetUndoStrings(ev, part, whichProperty, undoString, redoString);
- }
-
- //---------------------------------------------------------------------------------------
- // FW_CScriptableCollection::HandlePrimaryDeleted
- //---------------------------------------------------------------------------------------
-
- void FW_CScriptableCollection::HandlePrimaryDeleted(FW_MScriptable* primary)
- {
- fRep->Remove(primary);
- }
-